﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Telerik.WinControls;
using ICNCentral.InterfazGrafica;
using System.Media;
using ServicioDeLog;

namespace ICNCentral.InterfazGrafica
{
    public partial class Frm_Loguin : Telerik.WinControls.UI.RadForm
    {

        // DATOS QUE UTILIZAREMOS DESPUES EN CASO DE QUE EL LOGUEO TENGA UN RESULTADO NEGATIVO

        string UsuarioEstado;
        int Usuario_Conectado;
        int Intentos = 3;           // ACA DEFINIMOS LA CANTIDAD DE INTENTOS QUE TIENE EL USUARIO PARA INGRESAR AL SISTEMA
        DateTime Intento1;          // NO OBSTANTE, TAMBIEN HAY QUE MODIFICAR LA CANTIDAD DE VARIABLES Y EL SWITCH
        DateTime Intento2;
        DateTime Intento3;
        string Usuario1 = "";
        string Usuario2 = "";
        string Usuario3 = "";
        string Contraseña1 = "";
        string Contraseña2 = "";
        string Contraseña3 = "";
        

        // --------------------------------------------------------------------------------------------------------------------
        // --------------------------------------------------------------------------------------------------------------------


        public Frm_Loguin()
        {
            InitializeComponent();
        }

        
        private void Frm_Loguin_Load(object sender, EventArgs e)
        {
            Lbl_Intentos.Text = "Le restan " + Intentos + " intentos";
        }

        // CANCELA EL INGRESO DESCARGANDO EL SISTEMA DE MEMORIA
        private void Btn_Cancelar_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        // ACCION DE SEGURIDAD, CHEKEO Y REGISTRO EN CASO DE SER NEGATIVO
        private void Btn_Aceptar_Click(object sender, EventArgs e)
        {
            Comunicaciones.AccionesDeusuario Usuario = new Comunicaciones.AccionesDeusuario();
            UsuarioEstado = Usuario.Usuario_Estado(Convert.ToInt32(Txt_Legajo.Text));

            if (Usuario_Conectado == 1)
            {

                Application.Exit();
            }

            if (Usuario.Usuario_Activo(Convert.ToInt32(Txt_Legajo.Text)) == 0)
            {
                this.Hide();
                Frm_RechazoEntrada MensajeDeRechazo = new Frm_RechazoEntrada();
                MensajeDeRechazo.Lbl_CuerpoMensaje.Text = "Las razones de que su ingreso sea impedido son las siguientes: " + UsuarioEstado + " Para más información comuniquese por favor con Informática de la ICN";
                MensajeDeRechazo.TopMost = true;
                MensajeDeRechazo.Show();
            }
            else
            {

                if (Usuario.ComprobarContraseña(Convert.ToInt32(Txt_Legajo.Text), Txt_Contraseña.Text) == true)
                {
                    this.Hide();

                    Frm_MenuPrincipal frm_menuprincipal = new Frm_MenuPrincipal();
                    Comunicaciones.AccionesDeusuario Nombre = new Comunicaciones.AccionesDeusuario();

                    // ----------------------------------------------\\
                    // ACA PASAMOS LOS PARAMETROS AL FORMULARIO MENU \\
                    frm_menuprincipal.UsuarioLegajo = (Convert.ToInt32(Txt_Legajo.Text));
                    frm_menuprincipal.UsuarioApellido = Nombre.ObtenerApellido(Convert.ToInt32(Txt_Legajo.Text));
                    frm_menuprincipal.UsuarioApellido = frm_menuprincipal.UsuarioApellido.Trim();           // QUITAMOS LOS ESPACIOS SOBRANTES
                    frm_menuprincipal.UsuarioNombres = Nombre.ObtenerNombre(Convert.ToInt32(Txt_Legajo.Text));
                    frm_menuprincipal.UsuarioNombres = frm_menuprincipal.UsuarioNombres.Trim();             // QUITAMOS LOS ESPACIOS SOBRANTES
                    frm_menuprincipal.NivelDeAccesoPrincipal = Nombre.ObtenerNivelSeguridadPrincipal(Convert.ToInt32(Txt_Legajo.Text));
                    frm_menuprincipal.AccesoAHelpDeskNivel = Nombre.ObtenerNivelSeguridadHelpDesk(Convert.ToInt32(Txt_Legajo.Text));
                    frm_menuprincipal.AccesoAMemosNivel = Nombre.ObtenerNivelSeguridadMemos(Convert.ToInt32(Txt_Legajo.Text));
                    frm_menuprincipal.AccesoAdistribucionNivel = Nombre.ObtenerNivelSeguridadDistribucion(Convert.ToInt32(Txt_Legajo.Text));


                    // -----------------------------------------------------------------------------------------\\
                    // LUEGO DE PASAR LOS DATOS PRINCIPALES DEL USUARIO AL FORMULARIO PRINCIPAL ABRIMOS EL MENU \\
                    // Y ESTE SE ENCARGA DE DILUCIDAR SI EL USUARIO TIENE ACCESO A LOS DIVERSOS SISTEMAS        \\
                    frm_menuprincipal.Show();
                }
                else
                {
                    Intentos--;
                    SystemSounds.Beep.Play();
                    if (Intentos > 0) Lbl_Intentos.Text = "Le restan " + Intentos + " intentos";
                    if (Intentos == 0) Lbl_Intentos.Text = "Ud. ha agotado todos los intentos";

                    switch (Intentos)
                    {
                        case 2:
                            Usuario1 = Txt_Legajo.Text;
                            Contraseña1 = Txt_Contraseña.Text;
                            Intento1 = System.DateTime.Now;
                            break;
                        case 1:
                            Usuario2 = Txt_Legajo.Text;
                            Contraseña2 = Txt_Contraseña.Text;
                            Intento2 = System.DateTime.Now;
                            break;
                        case 0:
                            Usuario3 = Txt_Legajo.Text;
                            Contraseña3 = Txt_Contraseña.Text;
                            Intento3 = System.DateTime.Now;
                            break;
                    }

                }

                if (Intentos == 0)
                {
                    // BLOQUEAMOS TODOS LOS OBJETOS
                    Btn_Aceptar.Enabled = false;
                    Btn_Cancelar.Enabled = false;
                    Txt_Legajo.Enabled = false;
                    Txt_Contraseña.Enabled = false;

                    // REGISTRAMOS EL EVENTO
                    LogDeEventos GrabarIntentoFallido = new LogDeEventos(@"Err#99.xts");
                    GrabarIntentoFallido.GrabarTexto("===================================================================================================================");
                    GrabarIntentoFallido.GrabarTexto("===========================================================================");
                    GrabarIntentoFallido.GrabarTexto("Se intentó ingresar con el usuario: " + Usuario1 + ", con la contraseña: " + Contraseña1 + "; en esta fecha y hora: " + Intento1);
                    GrabarIntentoFallido.GrabarTexto(" ");
                    GrabarIntentoFallido.GrabarTexto("Luego:");
                    GrabarIntentoFallido.GrabarTexto("Se intentó ingresar con el usuario: " + Usuario2 + ", con la contraseña: " + Contraseña2 + "; en esta fecha y hora: " + Intento2);
                    GrabarIntentoFallido.GrabarTexto(" ");
                    GrabarIntentoFallido.GrabarTexto("Y por último:");
                    GrabarIntentoFallido.GrabarTexto("Se intentó ingresar con el usuario: " + Usuario3 + ", con la contraseña: " + Contraseña3 + "; en esta fecha y hora: " + Intento3);
                    GrabarIntentoFallido.GrabarTexto(" ");
                    GrabarIntentoFallido.GrabarTexto(" ");
                    GrabarIntentoFallido.GrabarTexto("===================================================================================================================");

                    // Y POR ULTIMO MOSTRAMOS UN CARTEL PARA ECHARLE FLY AL USUARIO
                    Frm_Advertencias Frm_AdvertirSalida = new Frm_Advertencias();
                    Frm_AdvertirSalida.TopMost = true;
                    Frm_AdvertirSalida.Btn_Aceptar.Text = "Salir";
                    Frm_AdvertirSalida.Text = "Advertencia";
                    Frm_AdvertirSalida.Opcion = 1;
                    Frm_AdvertirSalida.Lbl_CuerpoMensaje.Text = "Los datos ingresados son incorrectos. Verifique su usuario y clave e inténtelo luego.";
                    Frm_AdvertirSalida.Show();
                }
            }

        }
        // FIN DE ACCION DE SEGURIDAD


        private void Txt_Usuario_TextChanged(object sender, EventArgs e)
        {
            if (Txt_Legajo.TextLength == 6)
            {
                Txt_Contraseña.Enabled = true;
                if (Txt_Contraseña.TextLength > 5)
                {
                    Btn_Aceptar.Enabled = true;
                }
            }
            else
            {
                Txt_Contraseña.Enabled = false;
                Btn_Aceptar.Enabled = false;
            }
        }

        private void Txt_Contraseña_TextChanged(object sender, EventArgs e)
        {
            if (Txt_Legajo.TextLength == 6 & Txt_Contraseña.TextLength > 5)
            {
                Btn_Aceptar.Enabled = true;
            }
            else
            {
                Btn_Aceptar.Enabled = false;
            }
        }

        private void Txt_Usuario_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)(Keys.Enter))
            {
                e.Handled = true; SendKeys.Send("{TAB}");
            }
            base.OnKeyPress(e);
            
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void Txt_Contraseña_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)(Keys.Enter))
            {
                e.Handled = true; SendKeys.Send("{TAB}");
            }
            base.OnKeyPress(e);
        }

    }
}
